// using UnityEngine;
// using GGameFramework.Core.FSM;
//
// namespace GGameFramework.Examples.FSM
// {
//     /// <summary>
//     /// 玩家死亡状态
//     /// </summary>
//     public class PlayerDeathState : FsmState<PlayerController>
//     {
//         private const string KEY_HEALTH = "Health";
//         
//         private float m_DeathStartTime;
//         private float m_DeathAnimationDuration = 2.0f; // 死亡动画持续时间
//         private bool m_DeathEffectPlayed = false;
//         private bool m_RespawnRequested = false;
//         
//         protected internal override void OnInit(IFsm<PlayerController> fsm)
//         {
//             Debug.Log("死亡状态初始化");
//         }
//         
//         protected internal override void OnEnter(IFsm<PlayerController> fsm)
//         {
//             PlayerController player = fsm.Owner;
//             m_DeathStartTime = 0f;
//             m_DeathEffectPlayed = false;
//             m_RespawnRequested = false;
//             
//             // 设置死亡动画
//             if (player.GetAnimator() != null)
//             {
//                 player.GetAnimator().SetBool("IsDead", true);
//                 player.GetAnimator().SetBool("IsMoving", false);
//                 player.GetAnimator().SetBool("IsJumping", false);
//                 player.GetAnimator().SetBool("IsAttacking", false);
//                 player.GetAnimator().SetBool("IsHurt", false);
//                 player.GetAnimator().SetTrigger("DeathStart");
//             }
//             
//             // 播放死亡音效
//             // player.PlaySound(deathSound);
//             
//             // 设置死亡视觉效果
//             SetupDeathVisualEffect(player);
//             
//             // 播放死亡粒子效果
//             // PlayDeathParticles(player.transform.position);
//             
//             // 屏幕震动效果
//             // CameraShake.Instance.Shake(0.5f, 0.8f);
//             
//             // 禁用玩家输入
//             DisablePlayerInput(player);
//             
//             // 通知游戏管理器玩家死亡
//             // GameManager.Instance.OnPlayerDeath();
//             
//             Debug.Log("进入死亡状态");
//         }
//         
//         protected internal override void OnUpdate(IFsm<PlayerController> fsm, float elapseSeconds, float realElapseSeconds)
//         {
//             PlayerController player = fsm.Owner;
//             m_DeathStartTime += elapseSeconds;
//             
//             // 更新死亡视觉效果
//             UpdateDeathVisualEffect(player, elapseSeconds);
//             
//             // 死亡动画播放完成后，显示重生选项
//             if (m_DeathStartTime >= m_DeathAnimationDuration && !m_RespawnRequested)
//             {
//                 ShowRespawnOptions();
//                 m_RespawnRequested = true;
//             }
//             
//             // 检查重生输入
//             CheckRespawnInput(fsm, player);
//         }
//         
//         protected internal override void OnLeave(IFsm<PlayerController> fsm, bool isShutdown)
//         {
//             PlayerController player = fsm.Owner;
//             
//             // 停止死亡动画
//             if (player.GetAnimator() != null)
//             {
//                 player.GetAnimator().SetBool("IsDead", false);
//             }
//             
//             // 恢复视觉效果
//             RestoreVisualEffect(player);
//             
//             // 重新启用玩家输入
//             EnablePlayerInput(player);
//             
//             Debug.Log("离开死亡状态");
//         }
//         
//         protected internal override void OnDestroy(IFsm<PlayerController> fsm)
//         {
//             Debug.Log("死亡状态销毁");
//         }
//         
//         /// <summary>
//         /// 设置死亡视觉效果
//         /// </summary>
//         private void SetupDeathVisualEffect(PlayerController player)
//         {
//             // 设置死亡时的视觉效果
//             // 例如：变灰、透明度变化、材质切换等
//             
//             // 获取渲染器组件
//             var renderer = player.GetComponent<Renderer>();
//             if (renderer != null)
//             {
//                 // 设置死亡材质
//                 // renderer.material = deathMaterial;
//                 
//                 // 或者调整颜色和透明度
//                 Color deathColor = Color.gray;
//                 deathColor.a = 0.7f;
//                 renderer.material.color = deathColor;
//             }
//             
//             // 禁用阴影投射
//             var shadowCaster = player.GetComponent<UnityEngine.Rendering.ShadowCastingMode>();
//             if (shadowCaster != null)
//             {
//                 // 设置阴影模式
//             }
//         }
//         
//         /// <summary>
//         /// 更新死亡视觉效果
//         /// </summary>
//         private void UpdateDeathVisualEffect(PlayerController player, float deltaTime)
//         {
//             // 更新死亡时的视觉效果
//             // 例如：闪烁、渐变等
//             
//             var renderer = player.GetComponent<Renderer>();
//             if (renderer != null)
//             {
//                 // 创建死亡闪烁效果
//                 float flashSpeed = 2f;
//                 float alpha = Mathf.Sin(Time.time * flashSpeed) * 0.3f + 0.7f;
//                 
//                 Color deathColor = Color.gray;
//                 deathColor.a = alpha;
//                 renderer.material.color = deathColor;
//             }
//         }
//         
//         /// <summary>
//         /// 恢复视觉效果
//         /// </summary>
//         private void RestoreVisualEffect(PlayerController player)
//         {
//             // 恢复原始视觉效果
//             var renderer = player.GetComponent<Renderer>();
//             if (renderer != null)
//             {
//                 // 恢复原始材质和颜色
//                 // renderer.material = originalMaterial;
//                 renderer.material.color = Color.white;
//             }
//         }
//         
//         /// <summary>
//         /// 禁用玩家输入
//         /// </summary>
//         private void DisablePlayerInput(PlayerController player)
//         {
//             // 禁用角色控制器
//             var characterController = player.GetComponent<CharacterController>();
//             if (characterController != null)
//             {
//                 characterController.enabled = false;
//             }
//             
//             // 禁用其他输入相关组件
//             // 例如：禁用移动脚本、攻击脚本等
//         }
//         
//         /// <summary>
//         /// 启用玩家输入
//         /// </summary>
//         private void EnablePlayerInput(PlayerController player)
//         {
//             // 重新启用角色控制器
//             var characterController = player.GetComponent<CharacterController>();
//             if (characterController != null)
//             {
//                 characterController.enabled = true;
//             }
//             
//             // 重新启用其他输入相关组件
//         }
//         
//         /// <summary>
//         /// 显示重生选项
//         /// </summary>
//         private void ShowRespawnOptions()
//         {
//             // 显示重生UI
//             // UIManager.Instance.ShowRespawnPanel();
//             
//             Debug.Log("显示重生选项");
//         }
//         
//         /// <summary>
//         /// 检查重生输入
//         /// </summary>
//         private void CheckRespawnInput(IFsm<PlayerController> fsm, PlayerController player)
//         {
//             // 检查重生输入
//             if (Input.GetKeyDown(KeyCode.R))
//             {
//                 // 重生玩家
//                 RespawnPlayer(fsm, player);
//             }
//         }
//         
//         /// <summary>
//         /// 重生玩家
//         /// </summary>
//         private void RespawnPlayer(IFsm<PlayerController> fsm, PlayerController player)
//         {
//             // 重置玩家生命值
//             int maxHealth = fsm.GetData<IntVariable>("MaxHealth")?.Value ?? 100;
//             fsm.SetData(KEY_HEALTH, new IntVariable(maxHealth));
//             
//             // 重置玩家位置
//             // Vector3 respawnPoint = GameManager.Instance.GetRespawnPoint();
//             // player.transform.position = respawnPoint;
//             
//             // 重置玩家状态
//             player.Heal(maxHealth);
//             
//             // 切换到空闲状态
//             ChangeState<PlayerIdleState>(fsm);
//             
//             Debug.Log("玩家重生");
//         }
//         
//         public override string GetStateName()
//         {
//             return "死亡状态";
//         }
//         
//         public override bool CanTransitionTo<TState>(IFsm<PlayerController> fsm)
//         {
//             // 死亡状态只能转换到空闲状态（重生后）
//             if (typeof(TState) == typeof(PlayerIdleState))
//             {
//                 return true;
//             }
//             return false;
//         }
//     }
// }
